﻿using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using Wpf2.Models;

namespace Wpf2.ViewModels
{
    class InventoryViewModel
    {
        public ObservableCollection<Products> obsProducts = new ObservableCollection<Products>();
        public ObservableCollection<Products> ListProductsForAddInvetory = new ObservableCollection<Products>();
        bool _isSaved = false;
        int numberrOfSaved = 0;

        /// <summary>
        /// Thuộc tính xác định là hóa đơn loại Đá Hoa Cương
        /// </summary>
        private bool _isMarble;

        public bool IsMarble
        {
            get { return _isMarble; }
            set { _isMarble = value; changeMarble(value); }
        }

        public int NumberrOfSaved
        {
            get { return numberrOfSaved; }
            set { numberrOfSaved = value; }
        }

        public bool IsSaved
        {
          get { return _isSaved; }
          set { _isSaved = value; }
        }

        public InventoryViewModel()
        {
            getListProducts();
            createEmptyProduct();
        }

        public void addProduct(Products pro)
        {
            IsSaved = false;
            ListProductsForAddInvetory.Add(pro);
            reMarble();
        }

        private void createEmptyProduct()
        {
            Products emptyProduct = new Products
            {
                //IsExportOrder = false,// thêm mới 16-4
                ProductId = string.Empty,
                ProductName = string.Empty,
                ProductDescription = string.Empty,
                InventoryCount = 0,
                ProductWidth = 0,// thêm mới cho chức năng dài rộng (9/5/14)
                ProductHeight = 0,// thêm mới cho chức năng dài rộng (9/5/14)
                CostPrice = 0,
                TotalOutPayment = 0,
                TotalInPayment = 0
            };
            ListProductsForAddInvetory.Add(emptyProduct);
        }

        private void getListProducts()
        {
            var listProducts = WPFServices.Services.Products.GetListProducts().Select(
                x => new Products
                {
                    ProductIdAuto = x.ID_PRO_AUTO,
                    ProductId = x.ID_PRO,
                    ProductName = x.NAME_PRO,
                    ProductDescription = x.DESCRIPTIONS,
                    InventoryCount = (int)x.DETAILS_PRODUCTS.INVENTORY_COUNT,
                    CostPrice = (decimal)x.DETAILS_PRODUCTS.COST_PRICES,
                    Unit = new Unit { UnitID = x.DETAILS_PRODUCTS.UNIT.ID_UNIT, UnitName = x.DETAILS_PRODUCTS.UNIT.NAME_UNIT, UnitNote = x.DETAILS_PRODUCTS.UNIT.NOTES_UNIT },
                    catalog = new Catalogs { CatalogName = x.CATALOG.NAME_CATALOG, CatalogNotes = x.CATALOG.NOTES_CATALOG, IDCatalog = x.CATALOG.ID_CATALOG }
                });
            foreach (Products p in listProducts)
                obsProducts.Add(p);
        }

        /// <summary>
        /// Xóa product Null
        /// </summary>
        /// <returns></returns>
        public ObservableCollection<Products> removeAllNullProduct()
        {   
            ObservableCollection<Products> newList = new ObservableCollection<Products>();
            foreach (Products pro in ListProductsForAddInvetory)
                if (pro.ProductIdAuto > 0)
                    newList.Add(pro);
            return newList;
        }

        public bool lastProductIsNull()
        {
            if (ListProductsForAddInvetory[ListProductsForAddInvetory.Count - 1].ProductIdAuto < 1)
                return true;
            return false;
        }
        /// <summary>
        /// xác định rằng order đã được lưu
        /// sau khi lưu mới đc in
        /// </summary>
        public void isSaved()
        {
            IsSaved = true;
            NumberrOfSaved++;
        }

        /// <summary>
        /// Hàm thực thi khi người dùng chọn Đá Hoa Cương. Đổi tất cả thuộc tính [product.IsMarble] theo người dùng
        /// </summary>
        /// <param name="isMarcle">Xác định true or false</param>
        public void changeMarble(bool bIsMarcle)
        {
            foreach (Products pro in ListProductsForAddInvetory)
            {
                pro.IsMarble = bIsMarcle;
            }
        }

        /// <summary>
        /// Khi thêm mới Product cần thiết lập thuộc tính Marcle cho nó giống với hiện tại
        /// </summary>
        public void reMarble()
        {
            changeMarble(IsMarble);
        }
        
    }
}

